6 August 2023

게임잼 대전

by 꽈배기

Gen AI 대전 게임잼

image

저번 글로벌 게임잼을 이후로 두번째로 대전 게임잼을 참가하게 되었다.



주제는 Gen AI 로 나온 결과물로 게임을 만드는것!

예전 Novel AI 때 잠깐이나마 diffusion 생성 모델을 다뤄본적이 있었는데, 그때와 비교하면 굉장히 발전이 된듯하다.

총 12명으로 3명의 팀으로 나뉘어 게임을 제작하였는데, 우리팀은 골동품 가게 컨셉을 살려 AI 이미지를 최대한 활용해보기로 했다.

물론 주제를 정하기 전에 가장 중요한것은 팀원들간의 합의가 아니겠는가?

서로 골동품이라는 컨셉을 가지로 어떻게 게임을 진행시킬지 아이디어를 의논했고 크게 두 가지 결론이 나왔다.

  1. 상인에게 아이템을 주선하고 아이템을 제작 및 판매 (아이템 제작에 초점을 맞춘 메이커 게임)
  2. 중개인으로 모험가(NPC)의 물건을 상인과 중개 판매하고 금액에 따라 NPC의 던전 탐사율이 올라가는 탐사 게임. (NPC의 탐사를 돕는 매니지먼트)



1번째 방향성은 기획자님이 2번째 방향성은 내가 제시하였다.

첫번째는 중고품 판매로 우산금지와 비슷하며. 두번째는 매니지먼트와 제작이 혼합된 게임으로 비슷한 예시인 잭스미스에 가깝다고 볼 수 있다.

image

전당포가 주를 이루는 게임 우산금지

image

NPC에게 제작한 무기를 건내주는 잭스미스


우리팀은 한 10분가량 서로 머리를 맞대고 어떤것이 더 좋을지 의논을 진행하였고 결과는 1번이 되었다.



나는 개인적으로 2번을 주장하였는데 가장 큰 이유는 우선순위 기준을 “재미”로 판단했기 때문이다. (매니지먼트가 혼합되면 더 재밌을것이라 생각해서였다)

허나, 의논을 거친 결과 게임잼 시간 안에 매니지먼트의 재미요소 부분까지 구현이 힘들것이라 판단하여 1번째를 선택하였다.

결국 시간안에 구현하는것이 현 상황에 가장 중요하니 말이다.
그도 그럴것이 기획 개발 아트 가 각각 1:1:3으로 나 혼자 개발해야 할 상황이였기 때문… (물론 별개로 기획자님의 아이디어도 꽤 흥미로웠다)

그렇게 기획이 잡혀가고 즉시 개발을 시작했다.


코드를 작성하기 전 우선 구현 대상의 구조부터 생각했다. 아이템 제작이 초점이기에 다루어야 할 데이터가 많은 것이다. 간단히 생각해보아도.

  1. 아이템 이름
  2. 아이템 레시피 (재료)
  3. 아이템 판매가격
  4. 아이템 이미지
  5. 아이템 식별 코드

등이 필요하니 말이다.
그러니 요구사항을 정리해볼 필요가 있다.

  1. 관리해야 할 데이터가 많다.

    sJson 파일로 데이터를 관리하자

  2. 접근이 용이해야한다.

    개체에 접근하기 쉽도록 제너릭 싱글톤을 사용

  3. 데이터 추가 및 수정이 편리해야한다.

    Json 데이터 관리가 쉽도록 스크립트를 제어

  4. 아이템의 확장성을 고려하여야 한다. (레시피 조합 때문)

    아이템의 생성 로직을 분리하고 추상 팩토리를 사용



몇 가지 요구사항을 기반으로 작성을 시작했다.
게임잼 중후반에 갈수록 코드가 엉망으로 쌓여 도저히 손도 대기 힘든 코드가 되어버린 경험이 있었기에, 더욱 핵심 구조는 철저히 잡기로 하였다.

20230805_214442

옆에선 아트님들이 단련된 근력으로 열심히 AI를 갈구시는 중이다.

20230804_205229 중간에 맛있는 피자도 먹고 ㅎㅎ,,, 맛있게 잘 먹었습니다 PD님 ^- ^

20230805_214423 참고로 이번 게임잼에서는 개발 장비가 모두 세팅되어 있었다.

개인 노트북을 하나 가져왔는데 역시 개발은 장비빨이 중요하다 세삼스레 느낀다.
다만 모듈 단위로 역할을 많이 분리해놔서 그런지 모니터 3개가 부족할 지경이였다.

데이터들의 관리는 DataManager를 싱글톤으로 만들어 관리하였다. 하지만 데이터 관리에 미흡했던 탓에 꽤나 곤혹을 치르게 되었다.

{
            "code": 11,
            "price": 150,
            "honor": 2,
            "grade": 2,
            "name": "어둠의 창",
            "Image": "DarknessSpear",
            "description": "",
            "recipe":
            {
                "recipeCode": 11,
                "ingredientArray": [
                    {
                        "code": 0,
                        "needCount": 1
                    },
                    {
                        "code": 1,
                        "needCount": 2
                    },
                    {
                        "code": 3,
                        "needCount": 1
                    }]
	        }
},

무기 아이템의 데이터이다.

무엇보다 아이템 조합식과 그에 맞는 재료들을 매칭시켜 비교하는 과정에서 데이터 관리가 꽤 힘들었다. 마찬가지로 상인 / 재료 의 데이터도 모두 관리하기로 하였으니 가끔씩 생기는 배열의 인덱스 에러가 날 괴롭혔다..

<Manager.cs>
using UnityEngine;

public abstract class Manager<T> : MonoBehaviour where T : new()
{
    private static T _instance;

    public static T Instance
    {
        get
        {
            if (_instance == null)
            {
                _instance = FindObjectOfType(typeof(T)) as T;
                Debug.Log("인스턴스 생성");
            }
            return _instance;
        }
    }
}

관리할 것 들이 많아지다보니 위의 요구사항대로 제너릭 타입의 싱글톤을 사용하였는데, 크게 Item / Data / Game / Resource 으로 제너릭을 나누었다.
DataManager에서 Json 데이터 파싱과 관리를 담당하고 Item에서는 생성된 아이템 (인벤토리 정보) 등을 저장하였다.

처음 구조를 설계할때는 데이터와 실제 아이템을 분리해야하는것이 옳다고 생각하였음에도, 막상 코드를 어느정도 작성하고 나니 무의식적으로 혼용해서 사용한것 같다.

옆에서 개발을 하던분꼐서 하신 말씀이 생각난다.

연관관계와 데이터를 어떻게 관리할지 잘 구상하는것이 중요하다.

이 말을 듣고 고개를 한 5번은 끄덕인 것 같다. 격투게임과 마찬가지로 맞고나서야 실감하게 되는 것 … 아닐까?



바빠보이는 척.. 이것 저것 열심히 찾아다니는 모습

20230806_004219

새벽까지 하다가 배가 고파 팀원들끼리 치킨을 먹었다. 역시 밤새며 먹는 치킨은 치트키가 아닐까 싶을 정도의 맛. :cry:


20230806_133024 코딩 주머니를 담당할 국밥 :smile: :smile: :smile:






20230806_160440 마지막날에는 AI 멘토분이 오셔서 생성형 인공지능에 대해 설명해주셨다.


예상외의 부분이 네이버 TTS / 음성생성 기술이 전세계적인 수준이라고… 캐릭터마다 음성을 생성해서 적용시킬 수 있다면 인디게임의 저변도 강력해지지 않을까? 하는 생각이 들었다.

AI의 상용화가 이미 이루어지고 있고 특히 SD 모델의 성과가 계속 보이는걸로 보아 매우 기대가 된다.



이번 게임잼은 내게 꽤 큰 의미가 되지않았나 싶다. 노벨AI가 유출되고 난 후 잠깐 다뤄보았지만 그때 당시에는 모델의 부족함이 너무 많았다. (인체의 뒤틀림, 손가락의 기형 등)

하지만 현재 Gen2의 기술이라던지, MJ - gen2 runaway를 사용한 실시간 비디오 기술은 정말 놀라울 정도다.. 이번 기회를 통해 AI 리소스를 활용하는 방법을 고안해봐야겠다.



아래는 게임잼 기간동안 제작한 게임의 몇몇 스크린샷을 가져왔다. 현재 빌드에 약간 문제가 생겨 게임 플레이 영상은 추후에 추가하도록 해야겠다.

에디터 영상

2023-08-08 08;11;37

2023-08-08 08;12;15

2023-08-08 08;11;49